package ru.niir.goodfil.ui;

import ru.niir.goodfil.db.ClientGroup;
import ru.niir.goodfil.db.GoodType;
import ru.niir.goodfil.utils.PricelistItem;
import ru.niir.goodfil.utils.filters.GoodsFilter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class PricelistBean extends PageBean {
    private List<ClientGroup> clientGroups = new ArrayList<ClientGroup>();

    private List<PricelistItem> items = new ArrayList<PricelistItem>();

    public PricelistBean() {
        loadPricelist();
    }

    public void setGoodTypeId(long goodTypeId) {
        getSessionBean().getPricelistFilter().setGoodTypeId(goodTypeId);
        loadPricelist();
    }

    public long getGoodTypeId() {
        return getSessionBean().getPricelistFilter().getGoodTypeId();
    }

    public void loadPricelist() {
        clientGroups.clear();
        items.clear();

        //  Получаем выбранную группу товаров и выбранный брэнд
        long goodTypeId = getSessionBean().getPricelistFilter().getGoodTypeId();
        if (goodTypeId <= 0) return;

        long brandId = gf().getGoodTypeById(goodTypeId).getBrandId();
        if (brandId <= 0) return;

        //  Получаем клиентские группы и группы товаров, дочерние по отношению к выбранной
        clientGroups = gf().getClientGroupsByBrandId(brandId);
        Collections.sort(clientGroups, new Comparator<ClientGroup>() {
            public int compare(ClientGroup c1, ClientGroup c2) {
                return (int) (c1.getCriteriaSum() - c2.getCriteriaSum());
            }
        });

        List<GoodType> goodTypes = gf().getGoodTypesRecursivelyByParentId(goodTypeId, true);


        //  Формируем список отображаемых товаров
        for (GoodType goodType : goodTypes) {
            GoodsFilter goodsFilter = new GoodsFilter();
            goodsFilter.setGoodTypeId(goodType.getId());

            items.addAll(gf().getPricelist(0, Integer.MAX_VALUE, goodsFilter));
        }

        Collections.sort(items, new Comparator<PricelistItem>() {
            @Override
            public int compare(PricelistItem o1, PricelistItem o2) {
                return o1.getGood().getCode().compareTo(o2.getGood().getCode());
            }
        });
    }

    public List<ClientGroup> getClientGroups() {
        return clientGroups;
    }

    public void setClientGroups(List<ClientGroup> clientGroups) {
        this.clientGroups = clientGroups;
    }

    public List<PricelistItem> getItems() {
        return items;
    }

    public void setItems(List<PricelistItem> items) {
        this.items = items;
    }
}